/*
 * Timeloit.com Inc.
 * Copyright (c) 2012 时代凌宇物联网数据平台. All Rights Reserved
 */
package com.loiot.commons.utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.util.CookieGenerator;

/**
 * 此类提供cookie的存取及相关操作。
 * 
 * @author zhengrunjin
 * @since 0.1
 */
public class CookieUtil {

	/**
	 * 在HTTP请求中根据cookie名称，获得Cookie对象。
	 * 
	 * @param request
	 *            http请求。
	 * @param cookieName
	 *            cookie名称。
	 * 
	 * @return <p>
	 *         当找到cookie名称时返回Cookie对象。
	 *         <p>
	 *         当找不到cookie名称返回null。
	 */
	public static Cookie getCookie(HttpServletRequest request, String cookieName) {
		Cookie cookies[] = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				if (cookieName.equals(cookie.getName())) {
					return cookie;
				}
			}
		}
		return null;
	}

	/**
	 * 
	 * 在HTTP请求中根据cookie名称，获得Cookie值。
	 * 
	 * @param request
	 *            http请求。
	 * @param cookieName
	 *            cookie名称。
	 * @return <p>
	 *         当找到cookie名称时返回Cookie值。
	 *         <p>
	 *         当找不到cookie名称返回null。
	 */
	public static String getCookieValue(HttpServletRequest request, String cookieName) {
		Cookie cookie = getCookie(request, cookieName);
		if (cookie != null) {
			return cookie.getValue();
		} else {
			return null;
		}
	}

	/**
	 * 在HTTP的响应中添加一个新的Cookie。
	 * 
	 * @param response
	 *            http响应。
	 * @param cookieName
	 *            cookie名称。
	 * @param cookieValue
	 *            cookie值。
	 * @param path
	 *            路径。
	 * @param maxAge
	 *            有效时间，单位为：秒。
	 */
	public static void setCookie(HttpServletResponse response, String cookieName, String cookieValue, String cookiePath, int maxAge) {
		CookieGenerator cookie = new CookieGenerator();
		cookie.setCookieName(cookieName);
		cookie.setCookiePath(cookiePath);
		cookie.setCookieMaxAge(maxAge);
		cookie.addCookie(response, cookieValue);
	}

	/**
	 * 在HTTP的响应中删除一个Cookie。
	 * 
	 * @param response
	 *            http响应。
	 * @param cookieName
	 *            cookie名称。
	 * @param path
	 *            路径。
	 */
	public static void deleteCookie(HttpServletResponse response, String cookieName, String cookiePath) {
		CookieGenerator cookie = new CookieGenerator();
		cookie.setCookieName(cookieName);
		cookie.setCookiePath(cookiePath);
		cookie.removeCookie(response);
	}

	/**
	 * 在HTTP的响应中删除一个Cookie。
	 * 
	 * @param response
	 *            http响应。
	 * @param cookieName
	 *            cookie名称。
	 */
	public static void deleteCookie(HttpServletResponse response, String cookieName) {
		CookieGenerator cookie = new CookieGenerator();
		cookie.setCookieName(cookieName);
		cookie.removeCookie(response);
	}
}
